/**
 * 解析JS表达式
 * @param {*} str 字符串
 * @returns 
 */
export function parseJsExp(str) {
    try {
        const items = str.match(/\${([\w\d\][.$=><?!`"' ]*)}/g)
        if (items && items.length) {
            items.forEach(item => {
                const exp = item.match(/\${([\w\d\][.$=><?!`"' ]*)}/)[1]
                str = str.replace(item, new Function(`return ${exp}`).call(this))
            })
            return str
        }
    } catch (e) {
        console.error(e)
        return str
    }
    return new Function(`try{return ${str}} catch(e) {return '${str}'}`).call(this)
}

/**
 * 获取对象属性
 * @param {*} obj 对象
 * @param {*} exp 表达式
 */
export function getObjectValueByExp(obj, exp) {
    try {
        const exps = exp.split('.')
        return exps.reduce((res, cur) => {
            const itemExps = cur.match(/([\d\w]+)/g)
            return itemExps.reduce((res2, cur2) => res2[cur2], res)
        }, obj)
    } catch (e) {
        return undefined
    }
}